package com.rocky.project.tools;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.log4j.Logger;

/**
 * 
 */

/**
 * 基本的对文件夹进行处理导入的类
 * @author chen
 * @version 1.0
 * @since 1.5
 */
public abstract class BaseDirectoryImporter implements Importer {
	/**
	 * 成功数量
	 */
	protected int successCount = 0;

	/**
	 * 错误数量
	 */
	protected int errorCount = 0;

	/**
	 * 错误列表
	 */
	protected ArrayList<String> errors = new ArrayList<String>();
	protected Logger log = Logger.getLogger(this.getClass());

	/**
	 *导入的文件夹的绝对路径 
	 */
	private String path;

	/**
	 * 导入的文件夹的绝对路径
	 * @return 导入的文件夹的绝对路径
	 */
	public String getPath() {
		return path;
	}

	/**
	 * 导入的文件夹的绝对路径
	 * @param path 导入的文件夹的绝对路径
	 */
	public void setPath(String path) {
		this.path = path;
	}

	/**
	 *  开始导入数据
	 * @throws IOException
	 */
	public void beginImport() throws IOException {
//		log.info("开始导入数据！");
		File file = new File(this.path);
		boolean tmp = file.exists();
		if (tmp && file.isDirectory()) {
			this.LoopFile(file);
		} else {
			log.info("文件夹路径错误！" + this.path);
		}
//		log.info("结束数据导入！");
	}

	/**
	 * 子类必须继承的对象
	 * @param file 对文件进行相应处理
	 * @throws IOException IO流异常
	 */
	protected abstract void parseFile(File file) throws IOException;

	/**
	 * 对文件夹执行循环
	 * @param f 文件对象
	 * @throws IOException IO流异常
	 */
	private void LoopFile(File f) throws IOException {
		for (File tmp : f.listFiles()) {
			if (tmp.isFile()) {
//				log.info("找到文件路径为：" + tmp.getCanonicalPath());
				parseFile(tmp);
			} else {
				LoopFile(tmp);
			}
		}
	}

}
